home *** CD-ROM | disk | FTP | other *** search
- program TestAAHpDbug;
-
- {$APPTYPE CONSOLE}
-
- uses
- AAHpDbug in 'AAHpDbug.pas',
- SysUtils;
-
- var
- PtrArray : array [0..127] of pointer;
- i : integer;
- Size : integer;
- SavedMem : array [0..31] of byte;
-
- begin
- writeln('Testing AAHpDbug...');
- try
-
-
- {at this point the replacement heap manager should be installed}
- Assert(IsMemoryManagerSet, 'Heap manager has not been replaced');
-
- writeln('allocate 128 pointers');
- for i := 0 to 127 do begin
- Size := Random(512) + 1;
- GetMem(PtrArray[i], Size);
- FillChar(PtrArray[i]^, Size, Random(26) + ord('a'));
- end;
-
- writeln('free every even element');
- for i := 0 to 127 do
- if not Odd(i) then begin
- FreeMem(PtrArray[i]);
- PtrArray[i] := nil;
- end;
-
- writeln('reallocate every odd element');
- for i := 0 to 127 do
- if Odd(i) then begin
- Size := Random(512) + 1;
- ReallocMem(PtrArray[i], Size);
- FillChar(PtrArray[i]^, Size, Random(26) + ord('a'));
- end;
-
- writeln('free every odd element');
- for i := 0 to 127 do
- if Odd(i) then begin
- FreeMem(PtrArray[i]);
- PtrArray[i] := nil;
- end;
-
- writeln('perform a memory overwrite at the end');
- GetMem(PtrArray[0], 29);
- FillChar(PtrArray[0]^, 30, $11);
- FreeMem(PtrArray[0]);
-
- writeln('perform a memory overwrite at the start');
- GetMem(PtrArray[0], 29);
- dec(PChar(PtrArray[0]), 2);
- FillChar(PtrArray[0]^, 29, $11);
- inc(PChar(PtrArray[0]), 2);
- FreeMem(PtrArray[0]);
-
- writeln('dispose of a pointer twice');
- GetMem(PtrArray[0], 32);
- FreeMem(PtrArray[0]);
- try
- FreeMem(PtrArray[0]);
- except
- end;
-
- writeln('write to a pointer after freeing it');
- GetMem(PtrArray[0], 32);
- FillChar(PtrArray[0]^, 32, Random(26) + ord('a'));
- GetMem(PtrArray[1], 32);
- FillChar(PtrArray[1]^, 32, Random(26) + ord('a'));
- FreeMem(PtrArray[0]);
- try
- // Move(PtrArray[0]^, SavedMem, 32);
- FillChar(PtrArray[0]^, 32, 'A');
- FreeMem(PtrArray[1]);
- except
- end;
- // Move(SavedMem, PtrArray[0]^, 32);
-
-
- writeln('cause a couple of memory leaks');
- Size := Random(128) + 1;
- GetMem(PtrArray[0], Size);
- FillChar(PtrArray[0]^, Size, Random(26) + ord('a'));
- Size := Random(128) + 1;
- GetMem(PtrArray[1], Size);
- FillChar(PtrArray[1]^, Size, Random(26) + ord('a'));
-
- writeln('done');
-
-
- except
- on E : Exception do
- writeln(E.Message);
- end;
- write('Press Enter to close...');
- readln;
- end.
-